use anyhow::Result;
use bytes::{BufMut, BytesMut};


fn main() -> Result<()> {
    let mut buf = BytesMut::with_capacity(1024);
    buf.extend_from_slice(b"hello world!\n");
    buf.put(&b"goodby world!"[..]);
    println!("buf => {:?}",buf);
    buf.put_i64(0xaeafeef);  //0xa  a 没有显示， 也不知道 怎么加速， 如果是数字会显示

    println!("buf => {:?}",buf);
    let a = buf.split();  // split 还可以指定位置 吧， 
    println!("a => {:?}",a);
    println!("buf => {:?}",buf);

    let mut b= a.freeze(); // a没了， b 变为只读的a 内容  , Bytes 类型
   // println!("a => {:?}",a);  // a 不存在了， 打印不了， 访问不了
    
    //b.sear

    //let pos = b.binary_search(&("o".to_string()).as_bytes()[0]).unwrap();
  //  let pos = b.binary_search(&("o".as_bytes())[0]).unwrap();
  //let pos = b.binary_search(&b"\n").unwrap();   // 老师的不报错， ，我这就报错了 , 再看下文档吧。 老师的也报错了， 他当时没有保存， 看不出而已， 而且它也不用这个方法了， 他没那么神， 也没看懂解释

    // b.binary_search(x); 



    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    println!("length => {:?}",s.len());
    println!("13 pos => {:?}",s.binary_search(&13));
    println!("4 pos => {:?}",s.binary_search(&4));
    println!("100 pos => {:?}",s.binary_search(&100));
    // assert_eq!(s.binary_search(&13),  Ok(9));
    // assert_eq!(s.binary_search(&4),   Err(7));
    // assert_eq!(s.binary_search(&100), Err(13));
    // let r = s.binary_search(&1);
    // assert!(match r { Ok(1..=4) => true, _ => false, });


    // return to talk about Bytes   split_to function
    let c = b.split_to(12);  // 将b 在12位置 处分割， 前面 的归  c ， 后面的仍然是b 的

    println!("b => {:?}",b);
    //println!("buf => {:?}",buf);
    println!("c => {:?}",c);

   // print!("pos => {}",pos);
    


    Ok(())



}
